package win.smartown.kotlin.`class`

//类的声明包含类名、类头（指定类型参数，主构造函数等）,以及类主体（用大括号包裹）。
//类头和类体是可选的，如果没有类体可以省略大括号。
//class 类 constructor(参数1: Int, 参数2: String) {
//    //类体
//}

//class 无类头和类体的类

//构造函数
//在Kotlin中，类可以有一个主构造函数以及多个二级构造函数。主构造函数是类头的一部分：跟在类名后面，可以有可选的类型参数
//class Person constructor(name: String) {}

//如果主构造函数没有注释或者可见性说明，则constructor关键字是可以省略的
//class Book(name: String) {}

//fun main(args: Array<String>) {
//    Car("吉利", "帝豪")
//    Phone("小米", "6", "高通骁龙835").info()
//}

//主构造函数不能包含任意代码。初始换代码可以放在以init做前缀的初始化块内
//class Car constructor(brand: String, model: String) {
//    init {
//        println("Car brand:$brand , model:$model")
//    }
//}

//主构造函数的参数可以用在初始化块内，也可以用在类的属性初始化声明处
//class User(name: String) {
//    val bookName = name
//}

//声明属性并在主构造函数中初始化，在kotlin中有更简单的语法
//根普通属性一样，在主构造函数中的属性可以是可变或只读。
//class Phone(val brand: String, val model: String, val cpu: String) {
//    fun info(): Unit {
//        println("$brand $model 搭载$cpu 处理器")
//    }
//}

//如果构造函数有注解或可见性声明，则constructor关键字是必有的，并可见性应该在前面:
//class Customer public constructor(name: String) {}